package Code;

import java.util.ArrayList;
import java.util.List;

public class Code54 {
    static  List<Integer> spiralOrder(int[][] matrix) {
        List<Integer> res = new ArrayList<>();
        if(matrix == null || matrix[0].length == 0){
            return res;
        }
        int m = matrix.length;
        int n= matrix[0].length;
        int top = 0, bottom = m-1, left = 0, right = n-1;

        while(top <= bottom && left <= right){
            for(int j = left; j <= right; j++){
                res.add(matrix[top][j]);
            }
            top++;
            for(int i = top; i<= bottom; i++){
                res.add(matrix[i][right]);
            }
            right--;
            if(top <= bottom) {
                for (int j = right; j >= left; j--) {
                    res.add(matrix[bottom][j]);
                }
                bottom--;
            }
            if(left <= right){
                for(int i = bottom; i>=top; i--){
                    res.add(matrix[i][left]);
                }
                left++;
            }


        }
        return res;
    }
    public static void main(String[] args) {
        int[][] matrix = {
                {1, 2, 3},
                {4, 5, 6},
                {7, 8, 9}
        };
        List<Integer> result = spiralOrder(matrix);
        System.out.println(result);
    }
}
